#ifndef FPLAYER_USERAGENT_H
#define FPLAYER_USERAGENT_H

#include "DeviceManager.h"

/**
 * Author : xfan
 * Time   : 2024/1/8
 * Desc   : 代理  统一API调用路口
 */
class UserAgent {

protected:
  static UserAgent *_pInstance;
  bool _SoftDecode = false;
  bool _SoftEncode = false;

  DeviceManager *_pDeviceManager = nullptr;

private:
  UserAgent();

public:
  /**
   * 获取代理的单例对象
   * @return 代理对象
   */
  static UserAgent *Instance();

  /**
   * 销毁代理对象
   */
  static void Destroy();

  virtual ~UserAgent();

  /**
   * 设置编解码模式
   * @param softDecode 解码模式
   * @param softEncode 编码模式
   */
  void setCodecType(bool softDecode, bool softEncode);

  /**
   * 添加屏幕采集
   * @param width 屏幕宽
   * @param height 屏幕高
   * @return
   */
  bool addScreenDevice(int32_t width, int32_t height);

  /**
   * 添加网络摄像机
   * @param stStreamUrl 流地址
   * @param softDecode 解码类型
   * @param devType 设备类型
   * @return true:删除政工
   */
  bool addIPCameraDevice(const char *stStreamUrl, bool softDecode, int32_t devType);

  /**
   * 删除视频采集设备
   * @param devID 设备ID
   */
  void deleteCaptureDevice(int32_t devID);

  /**
   * 清空采集设备
   */
  void clearCaptureDevice();

  /**
   * 修改相机参数
   * @param width 预览宽
   * @param height 预览高
   */
  void modifyCameraDevice(int32_t width, int32_t height);

  /**
   * 修改相机参数
   * @param devID 设备ID
   * @param width 预览宽
   * @param height 预览高
   */
  void modifyCameraDevice(int32_t devID, int32_t width, int32_t height);

  /**
   * 修改音频参数
   * @param sampleRate 采样率
   * @param channelNum 通道数
   * @param samplesBitPer 采样位数
   */
  void modifyAudioDevice(int32_t sampleRate, int32_t channelNum, int32_t samplesBitPer);

  /**
   * 查询视频采集设备
   * @param devID 设备ID
   * @return 采集设备
   */
  IDevice *findCaptureDevice(int32_t devID);

  /**
   * @return 返回所有视频采集对象
   */
  std::list<IDevice *> getCaptureDevice();

  /**
   * @return 返回相机数量
   */
  int32_t getCameraDeviceNum();
};


#endif //FPLAYER_USERAGENT_H
